<html>
<head>
  <meta charset="UTF-8" name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/>
  <title>My Technical Documentation Page</title>
<!--  <script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script>-->
  <link href="../css/document.css" rel="stylesheet">
  <script src="../js/token.js"></script>

</head>
<body>
<div id="sidebar-container"></div>

<!-- 其他内容 -->
<script>
  // 使用JavaScript加载侧边栏内容
  const sidebarContainer = document.getElementById("sidebar-container");
  const xhr = new XMLHttpRequest();
  xhr.open("GET", "sidebar.html", true);
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      sidebarContainer.innerHTML = xhr.responseText;
    }
  };
  xhr.send();
</script>

<nav id="navbar" >
<!--  <header id="nav-head">Navbar</header>-->
  <a href="#pre" class="nav-link">前言</a>
  <a href="#do1" class="nav-link">开始</a>
  <a href="#do2" class="nav-link">客户端配置</a>
  <a href="#do3" class="nav-link">Recos配置</a>
  <a href="#do4" class="nav-link">Recos集群</a>
</nav>



<main id="main-doc" style="margin-top: 105px">
    <br>
   <section class="main-section" id="pre">
    <header><h1>前言</h1></header>
   <p>Recos的名字含义: Re表示Regist的缩写，Co表示Configuration的缩写，s则是Service的缩写</p>
   <p><code>作者:Mark姚</code></p>
    <p><code>邮箱:814712640@qq.com</code></p>
    <p><code>github : https://github.com/markyao98</code></p>
    <p>     一开始，Recos是我的另外一个项目(RPC框架)的辅助服务，目的是为了配合我的RPC项目完成服务注册与发现。
      当我的RPC项目完成之后，我发现Recos（当时还未起名字）经常出现连接不稳定的问题（当时是基于Redis开发）。
        所以就下决心打算好好改造一下Recos。
    </p>
    <p>经过观察，我发现基于Redis的Recos经常连接不稳定的原因在于Jedis的连接数量达到一定量时就会出现Jedis连接失败的异常。
        因此，我决定放弃使用Redis作为Recos的底座，转而使用HTTP服务器的形式。当然，之前版本的Recos也有许多可以值得沿用的地方，因此我也减少了不少工作量。
    </p>
    <p>
        花了大约两个月的时间,我完成了本项目。包括与SpringBoot框架整合,服务注册与发现,动态配置管理以及最后构建高可用的Recos(集群模式)。
        关于项目的源码以及提及的其他项目，都可在我的github仓库中找到。
    </p>

    </section>
   <section class="main-section" id="do1">
    <header><h1>开始</h1></header>
    <p>在配置搭建Recos服务之前,我们需要先下载必要的源码包,并且将它们引入Maven工程。</p>


    <ul>
      <li>引入RPC服务<br><br>
          <img src="../img/rpc.png"></li>
      <li>引入RecosConfig服务<br><br>
          <img src="../img/recosconfig.png"></li>
      <li>Recos源码包<br><br>
          <img src="../img/recosyuanma.png"></li>
      <li>下载完以上三个包之后将前两个引入Maven工程,Recos包则是单独启动。</li>

      <li>
          开始搭建我们的Maven工程，我们需要引入SpringCloud依赖包以及SpringCloudConfig依赖在父pom文件中,
          微服务们则需要引入其中的spring-cloud-starter-config依赖以及单独引入spring-boot-starter-actuator依赖。<br><br>
           父maven引入 <img src="../img/fumaven.png"><br> 微服务引入
          <img src="../img/consummaven.png"><br>
      </li>
        <li>
            做完以上准备搭建好Maven工厂，就可以开始配置了。
        </li>
    </ul>
    <code></code>

    </section>

  <section class="main-section" id="do2">
    <header><h1>客户端配置</h1></header>
    <p>本篇将以三个基本微服务为例描述如何配置客户端以及有哪些注意事项。</p>
    <p>两个生产者,一个消费者，一个公共模块(其中包含公共接口)
    <br><br>
        <img src="../img/zonglan.png">
    </p>
      <ul>
          <li>
              <p>
                  首先公共模块具备的接口有: <br><br>
                  <img src="../img/commominter.png">

              </p>
          </li>

          <li>
              <p>
                  搭建消费者服务(SpringBoot)之后编写配置文件:<br><br>
                 <img src="../img/consumapp1.png">
                 <img src="../img/consumapp2.png">
                 
                  <br><br>
                  消费者引入服务: <br><br>
                  <img src="../img/consumauto1.png">

                  <br><br>
                  Recos相关服务开启(注解开启): <br><br>
                  <img src="../img/AppConfig.png">
              </p>
          </li>

          <li>
             <p>
                 接下来我们搭建服务生产者: <br>
                    首先配置文件的编写,注解开启服务是一样的,不同之处在于服务提供者需要实现公共接口进而提供服务。<br><br>
                    <img src="../img/provi1.png"><br><br>
             </p>
              <p> 至此我们的RPC服务就搭建完毕，接下来我们利用服务消费者引用Recos的动态配置.也就是DEFAULT_GROUP分组下的test2.properties文件。</p>
              <p>
                  我们打开Recos查看一下这个配置文件。<br><br>
                  <img src="../img/test2.png"><br><br>
                  可以看到提供了两个属性值，testconfig，haha <br>
                  我们看看如何在微服务中引入这两个属性值。<br><br>
                    <img src="../img/autoconfig.png"> <br><br>
                  引入的方法很简单，就跟Spring框架中引入一个属性值一样。@Value注解即可。
              </p>
              <p>
                  这样，我们在Recos修改这两个属性值点击发布之后，微服务这边也会随之刷新。
              </p>
          </li>

          <li>
              <p>
                  除了这种方式可以动态刷新配置，Recos还提供了动态管理绑定配置文件的功能。<br>
                  前面我们在配置文件中填过:bindname。<br>
                  事实上这个就是我们微服务启动时所依赖的配置文件，我们同样可以在Recos上面动态刷新它。<br><br>
                    <img width="1000" height="300" src="../img/bind1.png"><br>
                    <img width="1000" height="600" src="../img/bind2.png"><br><br>
              </p>
          </li>

          <li>
              <p>
                  至此,我们客户端的配置就完毕了。
              </p>
          </li>
      </ul>


    <code></code>
  </section>
  <section class="main-section" id="do3">
    <header><h1>Recos配置</h1></header>
     <ul>
      <li>
          <p>
              客户端的配置完毕之后,我们打开Recos源码包，这里有两个文件需要注意。<br><br>
              <img src="../img/recos.png"><br><br>

          </p>
      </li>
      <li>
          <p>
              启动Recos之前，我们需要将recos.sql脚本执行到MySQL数据库中,然后将其配置进application.yml中。
                <br><br>
              <img src="../img/recosconfig0.png"><br><br>
          </p>
      </li>
      <li>
          <p>
              除此之外,上面的端口号也可以修改(6380)，以及Recos服务的用户名和密码(默认都为recos)。
              做好以上工作之后我们就可以启动Recos了。

          </p>
      </li>
    </ul>
    <code></code>
  </section>
  <section class="main-section" id="do4">
    <header><h1>Recos集群</h1></header>
     <ul>
      <li>
          <p>
              刚刚我们所配置的方式全是standalone启动的方式，也就是单体结构的Recos。<br>
              接下来我将演示如何开启Recos集群启动。<br>
              我们以三台机器演示（一主二从）
          </p>
      </li>
      <li>
          <p>
              首先有两个地方需要改动：<br>
              1.客户端配置文件需要修改<br><br>
                <img src="../img/kehuduan0.png"><br><br>
              2.Recos配置文件修改: <br><br>
              <img src="../img/recos0.png">
          </p>
      </li>
      <li>
          <p>
              当然，Recos的其他两台机器也要写上其他两台机器的ip+端口号。至此，Recos集群搭建完毕。
          </p>
      </li>
    </ul>
    <code></code>
  </section>

</main>
</body>
</html>
